package com.scuec.trainingmanagementsys.service;

import com.scuec.trainingmanagementsys.entity.Project;
import com.scuec.trainingmanagementsys.entity.TeamMember;
import java.util.Map;

import java.util.List;

public interface TeamMemberService {

    /**
     * 插入团队成员信息
     * @param teamMember 团队成员对象
     * @return 插入是否成功
     */
    boolean insertTeamMember(TeamMember teamMember);

    /**
     * 将指定团队成员的角色更新为 Leader
     * @param teamMemberID 团队成员 ID
     * @return 更新是否成功
     */
    boolean updateMemberRoleToLeader(Integer teamMemberID);

    /**
     * 查询学生是否已经加入某个项目
     * @param studentId 学生ID
     * @param projectId 项目ID
     * @return 是否加入
     */
    boolean isStudentJoinedProject(Integer studentId, Integer projectId);

    /**
     * 根据项目ID获取团队成员详情
     * @param projectId 项目ID
     * @return 团队成员详情列表
     */
    List<TeamMember> getTeamMembersByProjectId(Integer projectId);

    /**
     * 根据学生ID获取学生加入的项目列表
     * @param studentId 学生ID
     * @return 项目列表
     */
    List<Project> getJoinedProjects(Integer studentId);

    /**
     * 根据学生ID获取学生参与的项目列表
     * @param studentId 学生ID
     * @return 项目列表
     */
    List<Project> getProjectsByStudentId(Integer studentId);

    /**
     * 根据学生ID获取学生参与的项目列表（包含指导老师姓名）
     * @param studentId 学生ID
     * @return 包含指导老师姓名的项目列表
     */
    List<Project> getProjectsWithTeacherByStudentId(Integer studentId);

    /**
     * 获取学生按项目的分布数据
     * @return 包含项目名称和学生数量的列表
     */
    List<Map<String, Object>> getStudentDistributionByProject();

    /**
     * 根据项目ID获取团队成员详情，包括学生姓名和成员角色
     * @param projectId 项目ID
     * @return 团队成员详情列表
     */
    List<TeamMember> getTeamMembersDetailsByProjectId(Integer projectId);

    /**
     * 更新团队成员的角色
     * @param teamMemberID 团队成员ID
     * @param memberRole 新的成员角色
     * @return 更新是否成功
     */
    boolean updateMemberRole(Integer teamMemberID, String memberRole);
    boolean isTeamLeader(Integer teamID, Integer studentID);
    /**
     * 根据学生ID获取学生姓名
     * @param studentId 学生ID
     * @return 学生姓名
     */
    String getStudentNameByStudentId(Integer studentId);

    // TeamMemberService.java
    List<TeamMember> getTeamMembersByTeamId(Integer teamId);

    /**
     * 根据学生 ID 获取 TeamMember
     * @param studentId 学生 ID
     * @return TeamMember 对象
     */
    TeamMember getTeamMemberByStudentId(Integer studentId);

    /**
     * 根据 TeamMemberID 获取 TeamID
     * @param teamMemberID TeamMember ID
     * @return TeamID
     */
    Integer getTeamIdByTeamMemberId(Integer teamMemberID);
    /**
     * 根据学生 ID 获取 TeamMemberID
     * @param studentId 学生 ID
     * @return TeamMemberID
     */
    Integer getTeamMemberIdByStudentId(Integer studentId);
    Integer getTeamIdByStudentId(Integer studentId);
    Integer getTeamIdByStudentAndProject(Integer studentId, Integer projectId);

    String getMemberRole(Integer teamID, Integer studentID);

}